Component({
  properties: {
    // 卡片类型: default, primary, gradient, glass
    type: {
      type: String,
      value: 'default'
    },
    // 卡片大小: small, medium, large
    size: {
      type: String,
      value: 'medium'
    },
    // 是否启用悬停效果
    hover: {
      type: Boolean,
      value: false
    },
    // 卡片标题
    title: {
      type: String,
      value: ''
    },
    // 卡片副标题
    subtitle: {
      type: String,
      value: ''
    },
    // 卡片底部文本
    footer: {
      type: String,
      value: ''
    },
    // 阴影级别: shadow-none, shadow-sm, shadow-md, shadow-lg, shadow-xl
    shadow: {
      type: String,
      value: 'shadow-md'
    },
    // 自定义类名
    className: {
      type: String,
      value: ''
    },
    // 是否显示头部操作区域
    showAction: {
      type: Boolean,
      value: false
    },
    // 是否显示底部区域
    showFooter: {
      type: Boolean,
      value: false
    },
    // 是否显示装饰元素
    decoration: {
      type: Boolean,
      value: false
    },
    // 状态指示器
    status: {
      type: String,
      value: '' // success, warning, danger, info
    },
    // 是否加载中
    loading: {
      type: Boolean,
      value: false
    },
    // 加载文本
    loadingText: {
      type: String,
      value: '加载中...'
    },
    // 是否禁用
    disabled: {
      type: Boolean,
      value: false
    },
    // 是否选中
    selected: {
      type: Boolean,
      value: false
    }
  },

  data: {
    animationClass: ''
  },

  lifetimes: {
    attached() {
      // 添加入场动画
      this.addEntranceAnimation();
    }
  },

  methods: {
    handleTap() {
      this.triggerEvent('tap');
    },

    // 卡片点击事件
    onCardTap(e) {
      if (this.data.disabled || this.data.loading) {
        return;
      }
      
      // 触发点击事件
      this.triggerEvent('tap', {
        title: this.data.title,
        type: this.data.type
      });
      
      // 添加点击反馈
      this.addClickFeedback();
    },

    // 添加入场动画
    addEntranceAnimation() {
      // 随机延迟，创建错落有致的动画效果
      const delay = Math.random() * 300;
      setTimeout(() => {
        this.setData({
          animationClass: 'slide-in-up'
        });
      }, delay);
    },

    // 添加点击反馈
    addClickFeedback() {
      // 触觉反馈
      wx.vibrateShort({
        type: 'light'
      });
      
      // 视觉反馈已通过CSS实现
    },

    // 设置加载状态
    setLoading(loading, text = '加载中...') {
      this.setData({
        loading,
        loadingText: text
      });
    },

    // 设置状态
    setStatus(status) {
      this.setData({ status });
      
      // 自动清除状态
      if (status) {
        setTimeout(() => {
          this.setData({ status: '' });
        }, 3000);
      }
    },

    // 设置选中状态
    setSelected(selected) {
      this.setData({ selected });
      this.triggerEvent('selectionChange', { selected });
    },

    // 设置禁用状态
    setDisabled(disabled) {
      this.setData({ disabled });
    },

    // 显示成功状态
    showSuccess(message = '操作成功') {
      this.setStatus('success');
      if (message) {
        wx.showToast({
          title: message,
          icon: 'success',
          duration: 2000
        });
      }
    },

    // 显示错误状态
    showError(message = '操作失败') {
      this.setStatus('danger');
      if (message) {
        wx.showToast({
          title: message,
          icon: 'error',
          duration: 2000
        });
      }
    },

    // 显示警告状态
    showWarning(message = '请注意') {
      this.setStatus('warning');
      if (message) {
        wx.showToast({
          title: message,
          icon: 'none',
          duration: 2000
        });
      }
    },

    // 显示信息状态
    showInfo(message = '提示信息') {
      this.setStatus('info');
      if (message) {
        wx.showToast({
          title: message,
          icon: 'none',
          duration: 2000
        });
      }
    },

    // 重置卡片状态
    reset() {
      this.setData({
        loading: false,
        status: '',
        selected: false,
        disabled: false
      });
    },

    // 更新卡片内容
    updateContent(data) {
      const updateData = {};
      
      if (data.title !== undefined) updateData.title = data.title;
      if (data.subtitle !== undefined) updateData.subtitle = data.subtitle;
      if (data.type !== undefined) updateData.type = data.type;
      if (data.status !== undefined) updateData.status = data.status;
      
      this.setData(updateData);
    }
  }
}); 